/**  
 * 判断两个坐标点是否应该被视为同一位置  
 * @param {number} lat1 第一个点的纬度  
 * @param {number} lon1 第一个点的经度  
 * @param {number} lat2 第二个点的纬度  
 * @param {number} lon2 第二个点的经度  
 * @param {number} threshold 阈值距离（米），默认为 10 米  
 * @returns {boolean} 如果两点距离小于阈值，返回 true；否则返回 false  
 */
function isSameLocation(
    [{
            longitude: lon1,
            latitude: lat1
        },
        {
            longitude: lon2,
            latitude: lat2
        }
    ], threshold = 0) {
    const distance = haversineDistance(lat1, lon1, lat2, lon2);
    return distance <= threshold;
}

// Haversine 距离计算函数（保持不变）  
function haversineDistance(lat1, lon1, lat2, lon2) {
    const R = 6371000; // 地球平均半径，单位为米  

    const lat1Rad = toRadians(lat1);
    const lon1Rad = toRadians(lon1);
    const lat2Rad = toRadians(lat2);
    const lon2Rad = toRadians(lon2);

    const dlat = lat2Rad - lat1Rad;
    const dlon = lon2Rad - lon1Rad;
    const a = Math.sin(dlat / 2) * Math.sin(dlat / 2) +
        Math.cos(lat1Rad) * Math.cos(lat2Rad) *
        Math.sin(dlon / 2) * Math.sin(dlon / 2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    return R * c;
}

function toRadians(degrees) {
    return degrees * (Math.PI / 180);
}

module.exports = {
    isSameLocation
}